/**
 * @param {TreeNode} root
 * @return {boolean}
 */
var isSymmetric = function (root) {
  //如果二叉树为空：返回true（是对称二叉树）
  if (!root) return true

  //判断二叉树是否轴对称的函数
  function isMirror(t1, t2) {
    //如果左、右节点都为空，二叉树轴对称，返回true（已经是叶子节点了）
    if (!t1 && !t2) return true
    //如果其中一个节点为空，二叉树非轴对称，返回false（剪枝：如果当前左、右节点的其中一个为空，就没必要向下递归了）
    if (!t1 || !t2) return false
    //如果两个节点都不为空但是节点值不相等，二叉树非轴对称，返回false（剪枝：如果当前左、右节点的值不相等，就没必要向下递归了）
    if (t1.val !== t2.val) return false
    /*1.向下递归判断 t1的左孩子和t2的右孩子 t1的右孩子和t2的左孩子 是否轴对称
      2.向上返回该节点左、右子树是否轴对称的标识*/
    return isMirror(t1.left, t2.right) && isMirror(t1.right, t2.left)
  }

  //调用判断二叉树是否轴对称的函数：把左、右子树作为参数传入，返回结果（是否是对称二叉树）
  return isMirror(root.left, root.right)
};